home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 July & August / PCWorld_2006-07-08_cd.bin / komunikace / apache / apache_2[1].2.2-win32-x86-no_ssl.msi / Data1.cab / _1280BE97338B8750EB15C06F3C7377C6 < prev    next >
Text File  |  2005-02-04  |  5KB  |  161 lines

  1. /* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
  2.  * applicable.
  3.  *
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  *
  8.  *     http://www.apache.org/licenses/LICENSE-2.0
  9.  *
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16.  
  17. #ifndef APR_ALLOCATOR_H
  18. #define APR_ALLOCATOR_H
  19.  
  20. /**
  21.  * @file apr_allocator.h
  22.  * @brief APR Internal Memory Allocation
  23.  */
  24.  
  25. #include "apr.h"
  26. #include "apr_errno.h"
  27. #define APR_WANT_MEMFUNC /**< For no good reason? */
  28. #include "apr_want.h"
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. /**
  35.  * @defgroup apr_allocator Internal Memory Allocation
  36.  * @ingroup APR 
  37.  * @{
  38.  */
  39.  
  40. /** the allocator structure */
  41. typedef struct apr_allocator_t apr_allocator_t;
  42. /** the structure which holds information about the allocation */
  43. typedef struct apr_memnode_t apr_memnode_t;
  44.  
  45. /** basic memory node structure
  46.  * @note The next, ref and first_avail fields are available for use by the
  47.  *       caller of apr_allocator_alloc(), the remaining fields are read-only.
  48.  *       The next field has to be used with caution and sensibly set when the
  49.  *       memnode is passed back to apr_allocator_free().  See apr_allocator_free()
  50.  *       for details.  
  51.  *       The ref and first_avail fields will be properly restored by
  52.  *       apr_allocator_free().
  53.  */
  54. struct apr_memnode_t {
  55.     apr_memnode_t *next;            /**< next memnode */
  56.     apr_memnode_t **ref;            /**< reference to self */
  57.     apr_uint32_t   index;           /**< size */
  58.     apr_uint32_t   free_index;      /**< how much free */
  59.     char          *first_avail;     /**< pointer to first free memory */
  60.     char          *endp;            /**< pointer to end of free memory */
  61. };
  62.  
  63. /** The base size of a memory node - aligned.  */
  64. #define APR_MEMNODE_T_SIZE APR_ALIGN_DEFAULT(sizeof(apr_memnode_t))
  65.  
  66. /** Symbolic constants */
  67. #define APR_ALLOCATOR_MAX_FREE_UNLIMITED 0
  68.  
  69. /**
  70.  * Create a new allocator
  71.  * @param allocator The allocator we have just created.
  72.  *
  73.  */
  74. APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator);
  75.  
  76. /**
  77.  * Destroy an allocator
  78.  * @param allocator The allocator to be destroyed
  79.  * @remark Any memnodes not given back to the allocator prior to destroying
  80.  *         will _not_ be free()d.
  81.  */
  82. APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator);
  83.  
  84. /**
  85.  * Allocate a block of mem from the allocator
  86.  * @param allocator The allocator to allocate from
  87.  * @param size The size of the mem to allocate (excluding the
  88.  *        memnode structure)
  89.  */
  90. APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator,
  91.                                                  apr_size_t size);
  92.  
  93. /**
  94.  * Free a list of blocks of mem, giving them back to the allocator.
  95.  * The list is typically terminated by a memnode with its next field
  96.  * set to NULL.
  97.  * @param allocator The allocator to give the mem back to
  98.  * @param memnode The memory node to return
  99.  */
  100. APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator,
  101.                                      apr_memnode_t *memnode);
  102.  
  103. #include "apr_pools.h"
  104.  
  105. /**
  106.  * Set the owner of the allocator
  107.  * @param allocator The allocator to set the owner for
  108.  * @param pool The pool that is to own the allocator
  109.  * @remark Typically pool is the highest level pool using the allocator
  110.  */
  111. /*
  112.  * XXX: see if we can come up with something a bit better.  Currently
  113.  * you can make a pool an owner, but if the pool doesn't use the allocator
  114.  * the allocator will never be destroyed.
  115.  */
  116. APR_DECLARE(void) apr_allocator_owner_set(apr_allocator_t *allocator,
  117.                                           apr_pool_t *pool);
  118.  
  119. /**
  120.  * Get the current owner of the allocator
  121.  * @param allocator The allocator to get the owner from
  122.  */
  123. APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_allocator_t *allocator);
  124.  
  125. /**
  126.  * Set the current threshold at which the allocator should start
  127.  * giving blocks back to the system.
  128.  * @param allocator The allocator the set the threshold on
  129.  * @param size The threshold.  0 == unlimited.
  130.  */
  131. APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator,
  132.                                              apr_size_t size);
  133.  
  134. #include "apr_thread_mutex.h"
  135.  
  136. #if APR_HAS_THREADS
  137. /**
  138.  * Set a mutex for the allocator to use
  139.  * @param allocator The allocator to set the mutex for
  140.  * @param mutex The mutex
  141.  */
  142. APR_DECLARE(void) apr_allocator_mutex_set(apr_allocator_t *allocator,
  143.                                           apr_thread_mutex_t *mutex);
  144.  
  145. /**
  146.  * Get the mutex currently set for the allocator
  147.  * @param allocator The allocator
  148.  */
  149. APR_DECLARE(apr_thread_mutex_t *) apr_allocator_mutex_get(
  150.                                       apr_allocator_t *allocator);
  151.  
  152. #endif /* APR_HAS_THREADS */
  153.  
  154. /** @} */
  155.  
  156. #ifdef __cplusplus
  157. }
  158. #endif
  159.  
  160. #endif /* !APR_ALLOCATOR_H */
  161.